Various businesses have a need to run computer applications involving extensive computer processing, and computation time can be a vital factor in the success of the business. Hence there is a perpetual quest for increased computing power and reduction in computational time. For example, in the financial industry, there are many computational intensive factors, including: pricing and hedging complex derivatives; portfolio-pricing, hedging and risk (market, credit, and operational) calculations; value at risk calculations, end of day marked-to-market processing and report generation; and calibrating financial model to market.
The computation time can have a critical impact on the value and usefulness of the calculations. Continuing with the financial industry example, the 5 and 7 year Euro Dollar basis may be slipping relative to the 10-year swap one hour before the close of the financial-market trading period. The fixed income derivatives desk needs to re-calibrate its multi-factor model and re-hedge it's interest rate and volatility risk immediately because of conditions resulting in substantial variability of the yield curve. If the desk does not hedge, it will have a significant loss. Typically, it takes 30 minutes to re-calibrate a multi-factor model; 2 hours for mark-to-market of the portfolio; and 3 hours for risk reports; in all, 5 hours. In this situation, the desk cannot respond adequately in a timely manner and will likely put a costly, inaccurate hedge in place.
One way to solve large, complex problems in real time or minimum time is by using a supercomputer such as the Cray. Of course this option is very costly and not practical for the typical business.
Another way to achieve substantial computing power is through parallel (simultaneous) processing. Inexpensive off-the-shelf-processors, such as recent Pentium and Alpha chips have become very powerful, and they can be harnessed together in parallel for increased processing speed. Certain computers, mainly servers, have been provided with multiple processors to share the processing load, speeding overall operation. On a higher level, multiple computers have been linked together over a network in “cluster computing” arrangements, to act like a virtual computer. The basic concept is that the processing workload of an application is split into manageable sections that are distributed among the networked computers, to achieve relatively quick solutions of computational problems that are normally time-consuming. However, computer clusters perform distributed computing without controlling the return of results. On the other hand, the ideal of parallel processing is to achieve true parallel computing, which provides intelligent parsing and mapping of the workload to different processors, fault tolerance of the workload activity, balancing of the work, coordinating return of results, and scalability. Although systems achieving a degree of distributed computing have been available, true distributed, parallel computing has not been achieved until the present invention.
There are three general levels in the hierarchy of distributed computing. The simplest is task distributed processing. At this level, the identical application is run on multiple computers in a cluster, with a different set of initial parameters being passed to each computer. In order to achieve this level of distributed processing of an application, a user must develop a substantial amount of code to implement that processing. Commercial systems have been available to accomplish this, but they permit distributed processing of only the simplest linear problem.
At the second level of the hierarchy is data-distributed processing, which permits the computations of iterative processing loops in an application to be distributed across a computer cluster. To make use of this form of distributed processing in an application, substantial modification of the code internals and loop processing are necessary to develop the application. Even then, parallel computation is limited to the loop components and is not achieved at an algorithm level. Also, the heavy data distribution tends to utilize significant bandwidth, causing congestion in networks. This form of distributed processing may be used for linear problems but not non-linear problems. At least one commercial system has been available which achieves this level of distributed processing.
At the top of the hierarchy is algorithm distributed processing, in which the algorithm of an application is itself distributed among the computer cluster. This is achieved within the program itself by dynamically distributing the algorithm directives. This form of distributed processing is also lower in network bandwidth usage, because distribution is limited to the algorithm rather than a voluminous amount of data. Systems achieving algorithm distributed processing have not been available commercially.
Cluster middleware is used to interface between the server requesting distributed processing of an application and a computer cluster, to achieve distributed processing. The middleware is typically executable code made available by a vendor, which must be incorporated into an application adapted for distributed processing. The user must write a substantial amount of code to interface properly with the middleware and to utilize its available features.
As already explained, the most effective parallel computing involves distribution of tasks at the algorithm level of the program. Most computing falls into basic types of known algorithms. Some common algorithms are linear (structured); nonlinear (complex structure); Monte Carlo; non-recombining tree; Complex Monte Carlo; Branch & Bound (Multidimensional Solver); and Associative Network.
Existing parallel computing implementations fail to provide the capacity to parallelize paradigms except for the simplest linear type. In many industries, front, middle and back offices utilize diverse algorithms and applications. Many of these applications are time sensitive and mission critical and therefore require reduction in computation time and an increase in result accuracy. Diverse groups within enterprises require a universal parallel computing platform, ease of deployment of existing applications to a parallel computing platform, and ease of creation of new applications for a parallel computing platform.
What is needed in the art is the capacity to run essentially any parallel computing program on any distributed network. In particular in financial services and energy companies there is a strong need for a scalable distributed computing platform. The present invention solves these and other needs.